import { addRoutes, router } from './router'
import { getToken } from '@/utils/auth'
import { toast, showFullLoading, hideFullLoading } from './utils'
import store from './store'

// 防止重复性调用 getinfo 接口
let hasGetInfo = false
router.beforeEach(async (to, from, next) => {
  showFullLoading()
  const token = getToken()
  // 未登录，且跳转不是登录页，强制登录
  if (!token && to.path != '/login') {
    toast('请先登录', 'error')
    return next({ path: '/login' })
  }

  // 登录，但是还要跳转登录页, 跳转到原先页或首页
  if (token && to.path == '/login') {
    toast('请勿重复登录', 'warning')
    return next({ path: from.path ? from.path : '/' })
  }

  // 如果用户登录了，自动获取登录信息，并存储在vuex中
  let hasNewRoutes = false
  if (token && !hasGetInfo) {
    const res = await store.dispatch('getinfoAction')
    hasGetInfo = true
    /*
      动态添加路由(只有通过router。push，router。replace添加才能跳转成功)
        页面刷新后，不会自动调用这些方法，因此会跳转路由失败，需要手动的再次跳转路由
    */
    hasNewRoutes = addRoutes(res.data.menus)
  }

  // 设置页面标题
  document.title = (to.meta.title ? to.meta.title : '') + '-帝莎编程商城后台'
  hasNewRoutes ? next(to.fullPath) : next()
})

// 全局后置守卫
router.afterEach((to, from) => hideFullLoading())
